package gb

var OPCodeFunctionMap = [0x100]OPCodeUnit{
	//0x0_
	byte(0x00): {
		Func:  (*Core).OP00,
		Clock: 4,
		OP:    "NOP",
	},
	byte(0x01): {
		Func:  (*Core).OP01,
		Clock: 12,
		OP:    "LD BC,d16",
	},
	byte(0x02): {
		Func:  (*Core).OP02,
		Clock: 8,
		OP:    "LD BC,A",
	},
	byte(0x03): {
		Func:  (*Core).OP03,
		Clock: 8,
		OP:    "INC BC",
	},
	byte(0x04): {
		Func:  (*Core).OP04,
		Clock: 4,
		OP:    "INC B",
	},
	byte(0x05): {
		Func:  (*Core).OP05,
		Clock: 4,
		OP:    "DEC B",
	},
	byte(0x06): {
		Func:  (*Core).OP06,
		Clock: 8,
		OP:    "LD B,d8",
	},
	byte(0x07): {
		Func:  (*Core).OP07,
		Clock: 4,
		OP:    "RLCA",
	},
	byte(0x08): {
		Func:  (*Core).OP08,
		Clock: 20,
		OP:    "LD (a16),SP",
	},
	byte(0x09): {
		Func:  (*Core).OP09,
		Clock: 8,
		OP:    "ADD HL,BC",
	},
	byte(0x0B): {
		Func:  (*Core).OP0B,
		Clock: 8,
		OP:    "DEC BC",
	},
	byte(0x0A): {
		Func:  (*Core).OP0A,
		Clock: 8,
		OP:    "LD A,(BC)",
	},
	byte(0x0C): {
		Func:  (*Core).OP0C,
		Clock: 4,
		OP:    "INC C",
	},
	byte(0x0D): {
		Func:  (*Core).OP0D,
		Clock: 4,
		OP:    "DEC C",
	},
	byte(0x0E): {
		Func:  (*Core).OP0E,
		Clock: 8,
		OP:    "LD C,d8",
	},
	byte(0x0F): {
		Func:  (*Core).OP0F,
		Clock: 4,
		OP:    "RRCA",
	},
	//0x1_
	byte(0x10): {
		Func:  (*Core).OP10,
		Clock: 4,
		OP:    "STOP 0",
	},
	byte(0x11): {
		Func:  (*Core).OP11,
		Clock: 12,
		OP:    "LD DE,d16",
	},
	byte(0x12): {
		Func:  (*Core).OP12,
		Clock: 8,
		OP:    "LD (DE),A",
	},
	byte(0x13): {
		Func:  (*Core).OP13,
		Clock: 8,
		OP:    "INC DE",
	},
	byte(0x14): {
		Func:  (*Core).OP14,
		Clock: 4,
		OP:    "INC D",
	},
	byte(0x15): {
		Func:  (*Core).OP15,
		Clock: 4,
		OP:    "DEC D",
	},
	byte(0x16): {
		Func:  (*Core).OP16,
		Clock: 8,
		OP:    "LD D,d8",
	},
	byte(0x17): {
		Func:  (*Core).OP17,
		Clock: 4,
		OP:    "RLA",
	},
	byte(0x18): {
		Func:  (*Core).OP18,
		Clock: 12,
		OP:    "JR r8",
	},
	byte(0x19): {
		Func:  (*Core).OP19,
		Clock: 8,
		OP:    "ADD HL,DE",
	},
	byte(0x1A): {
		Func:  (*Core).OP1A,
		Clock: 8,
		OP:    "LD A,(DE)",
	},
	byte(0x1B): {
		Func:  (*Core).OP1B,
		Clock: 8,
		OP:    "DEC DE",
	},
	byte(0x1C): {
		Func:  (*Core).OP1C,
		Clock: 4,
		OP:    "INC E",
	},
	byte(0x1D): {
		Func:  (*Core).OP1D,
		Clock: 4,
		OP:    "DEC E",
	},
	byte(0x1E): {
		Func:  (*Core).OP1E,
		Clock: 8,
		OP:    "LD E,d8",
	},
	byte(0x1F): {
		Func:  (*Core).OP1F,
		Clock: 4,
		OP:    "RRA",
	},
	//0x2_
	byte(0x20): {
		Func:  (*Core).OP20,
		Clock: 8,
		OP:    "JR NZ,r8",
	},
	byte(0x21): {
		Func:  (*Core).OP21,
		Clock: 12,
		OP:    "LD HL,d16",
	},
	byte(0x22): {
		Func:  (*Core).OP22,
		Clock: 8,
		OP:    "LD (HL+),A",
	},
	byte(0x23): {
		Func:  (*Core).OP23,
		Clock: 8,
		OP:    "INC HL",
	},
	byte(0x24): {
		Func:  (*Core).OP24,
		Clock: 4,
		OP:    "INC H",
	},
	byte(0x25): {
		Func:  (*Core).OP25,
		Clock: 4,
		OP:    "DEC H",
	},
	byte(0x26): {
		Func:  (*Core).OP26,
		Clock: 8,
		OP:    "LD H,d8",
	},
	byte(0x27): {
		Func:  (*Core).OP27,
		Clock: 4,
		OP:    "DAA",
	},
	byte(0x28): {
		Func:  (*Core).OP28,
		Clock: 8,
		OP:    "JR Z,r8",
	},
	byte(0x29): {
		Func:  (*Core).OP29,
		Clock: 8,
		OP:    "ADD HL,HL",
	},
	byte(0x2A): {
		Func:  (*Core).OP2A,
		Clock: 8,
		OP:    "LD A,(HL+)",
	},
	byte(0x2B): {
		Func:  (*Core).OP2B,
		Clock: 8,
		OP:    "DEC HL",
	},
	byte(0x2C): {
		Func:  (*Core).OP2C,
		Clock: 4,
		OP:    "INC L",
	},
	byte(0x2D): {
		Func:  (*Core).OP2D,
		Clock: 4,
		OP:    "DEC L",
	},
	byte(0x2E): {
		Func:  (*Core).OP2E,
		Clock: 8,
		OP:    "LD L,d8",
	},
	byte(0x2F): {
		Func:  (*Core).OP2F,
		Clock: 4,
		OP:    "CPL",
	},
	//0x3_
	byte(0x30): {
		Func:  (*Core).OP30,
		Clock: 8,
		OP:    "JR NC,r8",
	},
	byte(0x31): {
		Func:  (*Core).OP31,
		Clock: 12,
		OP:    "LD SP,d16",
	},
	byte(0x32): {
		Func:  (*Core).OP32,
		Clock: 8,
		OP:    "LD (HL-),A",
	},
	byte(0x33): {
		Func:  (*Core).OP33,
		Clock: 8,
		OP:    "INC SP",
	},
	byte(0x34): {
		Func:  (*Core).OP34,
		Clock: 12,
		OP:    "INC (HL)",
	},
	byte(0x35): {
		Func:  (*Core).OP35,
		Clock: 12,
		OP:    "DEC (HL)",
	},
	byte(0x36): {
		Func:  (*Core).OP36,
		Clock: 12,
		OP:    "LD (HL),d8",
	},
	byte(0x37): {
		Func:  (*Core).OP37,
		Clock: 4,
		OP:    "SCF",
	},
	byte(0x38): {
		Func:  (*Core).OP38,
		Clock: 8,
		OP:    "JR C,r8",
	},
	byte(0x39): {
		Func:  (*Core).OP39,
		Clock: 8,
		OP:    "ADD HL,SP",
	},
	byte(0x3A): {
		Func:  (*Core).OP3A,
		Clock: 8,
		OP:    "LD A,(HL-)",
	},
	byte(0x3B): {
		Func:  (*Core).OP3B,
		Clock: 8,
		OP:    "DEC SP",
	},
	byte(0x3C): {
		Func:  (*Core).OP3C,
		Clock: 4,
		OP:    "INC A",
	},
	byte(0x3D): {
		Func:  (*Core).OP3D,
		Clock: 4,
		OP:    "DEC A",
	},
	byte(0x3E): {
		Func:  (*Core).OP3E,
		Clock: 8,
		OP:    "LD A,d8",
	},
	byte(0x3F): {
		Func:  (*Core).OP3F,
		Clock: 4,
		OP:    "CCF",
	},
	//0x4_
	byte(0x40): {
		Func:  (*Core).OP40,
		Clock: 4,
		OP:    "LD B,B",
	},
	byte(0x41): {
		Func:  (*Core).OP41,
		Clock: 4,
		OP:    "LD B,C",
	},
	byte(0x42): {
		Func:  (*Core).OP42,
		Clock: 4,
		OP:    "LD B,D",
	},
	byte(0x43): {
		Func:  (*Core).OP43,
		Clock: 4,
		OP:    "LD B,E",
	},
	byte(0x44): {
		Func:  (*Core).OP44,
		Clock: 4,
		OP:    "LD B,H",
	},
	byte(0x45): {
		Func:  (*Core).OP45,
		Clock: 4,
		OP:    "LD B,L",
	},
	byte(0x46): {
		Func:  (*Core).OP46,
		Clock: 8,
		OP:    "LD B,(HL)",
	},
	byte(0x47): {
		Func:  (*Core).OP47,
		Clock: 4,
		OP:    "LD B,A",
	},
	byte(0x48): {
		Func:  (*Core).OP48,
		Clock: 4,
		OP:    "LD C,B",
	},
	byte(0x49): {
		Func:  (*Core).OP49,
		Clock: 4,
		OP:    "LD C,C",
	},
	byte(0x4A): {
		Func:  (*Core).OP4A,
		Clock: 4,
		OP:    "LD C,D",
	},
	byte(0x4B): {
		Func:  (*Core).OP4B,
		Clock: 4,
		OP:    "LD C,E",
	},
	byte(0x4C): {
		Func:  (*Core).OP4C,
		Clock: 4,
		OP:    "LD C,H",
	},
	byte(0x4D): {
		Func:  (*Core).OP4D,
		Clock: 4,
		OP:    "LD C,L",
	},
	byte(0x4E): {
		Func:  (*Core).OP4E,
		Clock: 8,
		OP:    "LD C,(HL)",
	},
	byte(0x4F): {
		Func:  (*Core).OP4F,
		Clock: 4,
		OP:    "LD C,A",
	},
	//0x5_
	byte(0x50): {
		Func:  (*Core).OP50,
		Clock: 4,
		OP:    "LD D,B",
	},
	byte(0x51): {
		Func:  (*Core).OP51,
		Clock: 4,
		OP:    "LD D,C",
	},
	byte(0x52): {
		Func:  (*Core).OP52,
		Clock: 4,
		OP:    "LD D,D",
	},
	byte(0x53): {
		Func:  (*Core).OP53,
		Clock: 4,
		OP:    "LD D,E",
	},
	byte(0x54): {
		Func:  (*Core).OP54,
		Clock: 4,
		OP:    "LD D,H",
	},
	byte(0x55): {
		Func:  (*Core).OP55,
		Clock: 4,
		OP:    "LD D,L",
	},
	byte(0x56): {
		Func:  (*Core).OP56,
		Clock: 8,
		OP:    "LD D,(HL)",
	},
	byte(0x57): {
		Func:  (*Core).OP57,
		Clock: 4,
		OP:    "LD D,A",
	},
	byte(0x58): {
		Func:  (*Core).OP58,
		Clock: 4,
		OP:    "LD E,B",
	},
	byte(0x59): {
		Func:  (*Core).OP59,
		Clock: 4,
		OP:    "LD E,C",
	},
	byte(0x5A): {
		Func:  (*Core).OP5A,
		Clock: 4,
		OP:    "LD E,D",
	},
	byte(0x5B): {
		Func:  (*Core).OP5B,
		Clock: 4,
		OP:    "LD E,E",
	},
	byte(0x5C): {
		Func:  (*Core).OP5C,
		Clock: 4,
		OP:    "LD E,H",
	},
	byte(0x5D): {
		Func:  (*Core).OP5D,
		Clock: 4,
		OP:    "LD E,L",
	},
	byte(0x5E): {
		Func:  (*Core).OP5E,
		Clock: 8,
		OP:    "LD E,(HL)",
	},
	byte(0x5F): {
		Func:  (*Core).OP5F,
		Clock: 4,
		OP:    "LD E,A",
	},
	//0X6_
	byte(0x60): {
		Func:  (*Core).OP60,
		Clock: 4,
		OP:    "LD H,B",
	},
	byte(0x61): {
		Func:  (*Core).OP61,
		Clock: 4,
		OP:    "LD H,C",
	},
	byte(0x62): {
		Func:  (*Core).OP62,
		Clock: 4,
		OP:    "LD H,D",
	},
	byte(0x63): {
		Func:  (*Core).OP63,
		Clock: 4,
		OP:    "LD H,E",
	},
	byte(0x64): {
		Func:  (*Core).OP64,
		Clock: 4,
		OP:    "LD H,H",
	},
	byte(0x65): {
		Func:  (*Core).OP65,
		Clock: 4,
		OP:    "LD H,L",
	},
	byte(0x66): {
		Func:  (*Core).OP66,
		Clock: 8,
		OP:    "LD H,(HL)",
	},
	byte(0x67): {
		Func:  (*Core).OP67,
		Clock: 4,
		OP:    "LD H,A",
	},
	byte(0x68): {
		Func:  (*Core).OP68,
		Clock: 4,
		OP:    "LD L,B",
	},
	byte(0x69): {
		Func:  (*Core).OP69,
		Clock: 4,
		OP:    "LD L,C",
	},
	byte(0x6A): {
		Func:  (*Core).OP6A,
		Clock: 4,
		OP:    "LD L,D",
	},
	byte(0x6B): {
		Func:  (*Core).OP6B,
		Clock: 4,
		OP:    "LD L,E",
	},
	byte(0x6C): {
		Func:  (*Core).OP6C,
		Clock: 4,
		OP:    "LD L,H",
	},
	byte(0x6D): {
		Func:  (*Core).OP6D,
		Clock: 4,
		OP:    "LD L,L",
	},
	byte(0x6E): {
		Func:  (*Core).OP6E,
		Clock: 8,
		OP:    "LD L,(HL)",
	},
	byte(0x6F): {
		Func:  (*Core).OP6F,
		Clock: 4,
		OP:    "LD L,A",
	},
	//0X7_
	byte(0x70): {
		Func:  (*Core).OP70,
		Clock: 8,
		OP:    "LD (HL),B",
	},
	byte(0x71): {
		Func:  (*Core).OP71,
		Clock: 8,
		OP:    "LD (HL),C",
	},
	byte(0x72): {
		Func:  (*Core).OP72,
		Clock: 8,
		OP:    "LD (HL),D",
	},
	byte(0x73): {
		Func:  (*Core).OP73,
		Clock: 8,
		OP:    "LD (HL),E",
	},
	byte(0x74): {
		Func:  (*Core).OP74,
		Clock: 8,
		OP:    "LD (HL),H",
	},
	byte(0x75): {
		Func:  (*Core).OP75,
		Clock: 8,
		OP:    "LD (HL),L",
	},
	byte(0x76): {
		Func:  (*Core).OP76,
		Clock: 4,
		OP:    "HALT",
	},
	byte(0x77): {
		Func:  (*Core).OP77,
		Clock: 8,
		OP:    "LD (HL),A",
	},
	byte(0x78): {
		Func:  (*Core).OP78,
		Clock: 4,
		OP:    "LD A,B",
	},
	byte(0x79): {
		Func:  (*Core).OP79,
		Clock: 4,
		OP:    "LD A,C",
	},
	byte(0x7A): {
		Func:  (*Core).OP7A,
		Clock: 4,
		OP:    "LD A,D",
	},
	byte(0x7B): {
		Func:  (*Core).OP7B,
		Clock: 4,
		OP:    "LD A,E",
	},
	byte(0x7C): {
		Func:  (*Core).OP7C,
		Clock: 4,
		OP:    "LD A,H",
	},
	byte(0x7D): {
		Func:  (*Core).OP7D,
		Clock: 4,
		OP:    "LD A,L",
	},
	byte(0x7E): {
		Func:  (*Core).OP7E,
		Clock: 8,
		OP:    "LD A,(HL)",
	},
	byte(0x7F): {
		Func:  (*Core).OP7F,
		Clock: 4,
		OP:    "LD A,A",
	},
	//0x8_
	byte(0x80): {
		Func:  (*Core).OP80,
		Clock: 4,
		OP:    "ADD A,B",
	},
	byte(0x81): {
		Func:  (*Core).OP81,
		Clock: 4,
		OP:    "ADD A,C",
	},
	byte(0x82): {
		Func:  (*Core).OP82,
		Clock: 4,
		OP:    "ADD A,D",
	},
	byte(0x83): {
		Func:  (*Core).OP83,
		Clock: 4,
		OP:    "ADD A,E",
	},
	byte(0x84): {
		Func:  (*Core).OP84,
		Clock: 4,
		OP:    "ADD A,H",
	},
	byte(0x85): {
		Func:  (*Core).OP85,
		Clock: 4,
		OP:    "ADD A,L",
	},
	byte(0x86): {
		Func:  (*Core).OP86,
		Clock: 8,
		OP:    "ADD A,(HL)",
	},
	byte(0x87): {
		Func:  (*Core).OP87,
		Clock: 4,
		OP:    "ADD A,A",
	},
	byte(0x88): {
		Func:  (*Core).OP88,
		Clock: 4,
		OP:    "ADC A,B",
	},
	byte(0x89): {
		Func:  (*Core).OP89,
		Clock: 4,
		OP:    "ADC A,C",
	},
	byte(0x8A): {
		Func:  (*Core).OP8A,
		Clock: 4,
		OP:    "ADC A,D",
	},
	byte(0x8B): {
		Func:  (*Core).OP8B,
		Clock: 4,
		OP:    "ADC A,E",
	},
	byte(0x8C): {
		Func:  (*Core).OP8C,
		Clock: 4,
		OP:    "ADC A,H",
	},
	byte(0x8D): {
		Func:  (*Core).OP8D,
		Clock: 4,
		OP:    "ADC A,L",
	},
	byte(0x8E): {
		Func:  (*Core).OP8E,
		Clock: 8,
		OP:    "ADC A,(HL)",
	},
	byte(0x8F): {
		Func:  (*Core).OP8F,
		Clock: 4,
		OP:    "ADC A,A",
	},
	//0x9_
	byte(0x90): {
		Func:  (*Core).OP90,
		Clock: 4,
		OP:    "SUB B",
	},
	byte(0x91): {
		Func:  (*Core).OP91,
		Clock: 4,
		OP:    "SUB C",
	},
	byte(0x92): {
		Func:  (*Core).OP92,
		Clock: 4,
		OP:    "SUB D",
	},
	byte(0x93): {
		Func:  (*Core).OP93,
		Clock: 4,
		OP:    "SUB E",
	},
	byte(0x94): {
		Func:  (*Core).OP94,
		Clock: 4,
		OP:    "SUB H",
	},
	byte(0x95): {
		Func:  (*Core).OP95,
		Clock: 4,
		OP:    "SUB L",
	},
	byte(0x96): {
		Func:  (*Core).OP96,
		Clock: 8,
		OP:    "SUB (HL)",
	},
	byte(0x97): {
		Func:  (*Core).OP97,
		Clock: 4,
		OP:    "SUB A",
	},
	byte(0x98): {
		Func:  (*Core).OP98,
		Clock: 4,
		OP:    "SBC A,B",
	},
	byte(0x99): {
		Func:  (*Core).OP99,
		Clock: 4,
		OP:    "SBC A,C",
	},
	byte(0x9A): {
		Func:  (*Core).OP9A,
		Clock: 4,
		OP:    "SBC A,D",
	},
	byte(0x9B): {
		Func:  (*Core).OP9B,
		Clock: 4,
		OP:    "SBC A,E",
	},
	byte(0x9C): {
		Func:  (*Core).OP9C,
		Clock: 4,
		OP:    "SBC A,H",
	},
	byte(0x9D): {
		Func:  (*Core).OP9D,
		Clock: 4,
		OP:    "SBC A,L",
	},
	byte(0x9E): {
		Func:  (*Core).OP9E,
		Clock: 8,
		OP:    "SBC A,(HL)",
	},
	byte(0x9F): {
		Func:  (*Core).OP9F,
		Clock: 4,
		OP:    "SBC A,A",
	},
	//0xA_
	byte(0xAF): {
		Func:  (*Core).OPAF,
		Clock: 4,
		OP:    "XOR A",
	},
	byte(0xA0): {
		Func:  (*Core).OPA0,
		Clock: 4,
		OP:    "AND B",
	},
	byte(0xA1): {
		Func:  (*Core).OPA1,
		Clock: 4,
		OP:    "AND C",
	},
	byte(0xA2): {
		Func:  (*Core).OPA2,
		Clock: 4,
		OP:    "AND D",
	},
	byte(0xA3): {
		Func:  (*Core).OPA3,
		Clock: 4,
		OP:    "AND E",
	},
	byte(0xA4): {
		Func:  (*Core).OPA4,
		Clock: 4,
		OP:    "AND H",
	},
	byte(0xA5): {
		Func:  (*Core).OPA5,
		Clock: 4,
		OP:    "AND L",
	},
	byte(0xA6): {
		Func:  (*Core).OPA6,
		Clock: 8,
		OP:    "AND (HL)",
	},
	byte(0xA7): {
		Func:  (*Core).OPA7,
		Clock: 4,
		OP:    "AND A",
	},
	byte(0xA8): {
		Func:  (*Core).OPA8,
		Clock: 4,
		OP:    "XOR B",
	},
	byte(0xA9): {
		Func:  (*Core).OPA9,
		Clock: 4,
		OP:    "XOR C",
	},
	byte(0xAA): {
		Func:  (*Core).OPAA,
		Clock: 4,
		OP:    "XOR D",
	},
	byte(0xAB): {
		Func:  (*Core).OPAB,
		Clock: 4,
		OP:    "XOR E",
	},
	byte(0xAC): {
		Func:  (*Core).OPAC,
		Clock: 4,
		OP:    "XOR H",
	},
	byte(0xAD): {
		Func:  (*Core).OPAD,
		Clock: 4,
		OP:    "XOR L",
	},
	byte(0xAE): {
		Func:  (*Core).OPAE,
		Clock: 8,
		OP:    "XOR (HL)",
	},
	//0xB_
	byte(0xB0): {
		Func:  (*Core).OPB0,
		Clock: 4,
		OP:    "OR B",
	},
	byte(0xB1): {
		Func:  (*Core).OPB1,
		Clock: 4,
		OP:    "OR C",
	},
	byte(0xB2): {
		Func:  (*Core).OPB2,
		Clock: 4,
		OP:    "OR D",
	},
	byte(0xB3): {
		Func:  (*Core).OPB3,
		Clock: 4,
		OP:    "OR E",
	},
	byte(0xB4): {
		Func:  (*Core).OPB4,
		Clock: 4,
		OP:    "OR H",
	},
	byte(0xB5): {
		Func:  (*Core).OPB5,
		Clock: 4,
		OP:    "OR L",
	},
	byte(0xB6): {
		Func:  (*Core).OPB6,
		Clock: 8,
		OP:    "OR (HL)",
	},
	byte(0xB7): {
		Func:  (*Core).OPB7,
		Clock: 4,
		OP:    "OR A",
	},
	byte(0xB8): {
		Func:  (*Core).OPB8,
		Clock: 4,
		OP:    "CP B",
	},
	byte(0xB9): {
		Func:  (*Core).OPB9,
		Clock: 4,
		OP:    "CP C",
	},
	byte(0xBA): {
		Func:  (*Core).OPBA,
		Clock: 4,
		OP:    "CP D",
	},
	byte(0xBB): {
		Func:  (*Core).OPBB,
		Clock: 4,
		OP:    "CP E",
	},
	byte(0xBC): {
		Func:  (*Core).OPBC,
		Clock: 4,
		OP:    "CP H",
	},
	byte(0xBD): {
		Func:  (*Core).OPBD,
		Clock: 4,
		OP:    "CP L",
	},
	byte(0xBE): {
		Func:  (*Core).OPBE,
		Clock: 8,
		OP:    "CP (HL)",
	},
	byte(0xBF): {
		Func:  (*Core).OPBF,
		Clock: 4,
		OP:    "CP A",
	},
	//0xC_
	byte(0xC0): {
		Func:  (*Core).OPC0,
		Clock: 8,
		OP:    "RET NZ",
	},
	byte(0xC1): {
		Func:  (*Core).OPC1,
		Clock: 12,
		OP:    "POP BC",
	},
	byte(0xC2): {
		Func:  (*Core).OPC2,
		Clock: 12,
		OP:    "JP NZ,a16",
	},
	byte(0xC3): {
		Func:  (*Core).OPC3,
		Clock: 16,
		OP:    "JP a16",
	},
	byte(0xC4): {
		Func:  (*Core).OPC4,
		Clock: 12,
		OP:    "CALL NZ,a16",
	},
	byte(0xC5): {
		Func:  (*Core).OPC5,
		Clock: 16,
		OP:    "PUSH BC",
	},
	byte(0xC6): {
		Func:  (*Core).OPC6,
		Clock: 8,
		OP:    "ADD A,d8",
	},
	byte(0xC7): {
		Func:  (*Core).OPC7,
		Clock: 16,
		OP:    "RST 00H",
	},
	byte(0xC8): {
		Func:  (*Core).OPC8,
		Clock: 8,
		OP:    "RET Z",
	},
	byte(0xC9): {
		Func:  (*Core).OPC9,
		Clock: 16,
		OP:    "RET",
	},
	byte(0xCA): {
		Func:  (*Core).OPCA,
		Clock: 12,
		OP:    "JP Z,a16",
	},
	byte(0xCB): {
		Func:  (*Core).OPCB,
		Clock: 4,
		OP:    "PERFIX CB",
	},
	byte(0xCC): {
		Func:  (*Core).OPCC,
		Clock: 12,
		OP:    "CALL Z,a16",
	},
	byte(0xCD): {
		Func:  (*Core).OPCD,
		Clock: 24,
		OP:    "CALL a16",
	},
	byte(0xCE): {
		Func:  (*Core).OPCE,
		Clock: 8,
		OP:    "ADC A,d8",
	},
	byte(0xCF): {
		Func:  (*Core).OPCF,
		Clock: 16,
		OP:    "RST 08H",
	},
	//0xD_
	byte(0xD0): {
		Func:  (*Core).OPD0,
		Clock: 8,
		OP:    "RET NC",
	},
	byte(0xD1): {
		Func:  (*Core).OPD1,
		Clock: 12,
		OP:    "POP DE",
	},
	byte(0xD2): {
		Func:  (*Core).OPD2,
		Clock: 12,
		OP:    "JP NC,a16",
	},
	byte(0xD4): {
		Func:  (*Core).OPD4,
		Clock: 12,
		OP:    "CALL NC,a16",
	},
	byte(0xD5): {
		Func:  (*Core).OPD5,
		Clock: 16,
		OP:    "PUSH DE",
	},
	byte(0xD6): {
		Func:  (*Core).OPD6,
		Clock: 8,
		OP:    "SUB d8",
	},
	byte(0xD7): {
		Func:  (*Core).OPD7,
		Clock: 16,
		OP:    "RST 10H",
	},
	byte(0xD8): {
		Func:  (*Core).OPD8,
		Clock: 8,
		OP:    "RET C",
	},
	byte(0xD9): {
		Func:  (*Core).OPD9,
		Clock: 16,
		OP:    "RETI",
	},
	byte(0xDA): {
		Func:  (*Core).OPDA,
		Clock: 12,
		OP:    "JP C,a16",
	},
	byte(0xDC): {
		Func:  (*Core).OPDC,
		Clock: 12,
		OP:    "CALL C,a16",
	},
	byte(0xDE): {
		Func:  (*Core).OPDE,
		Clock: 8,
		OP:    "SBC A,d8",
	},
	byte(0xDF): {
		Func:  (*Core).OPDF,
		Clock: 16,
		OP:    "RST 18H",
	},
	//0xE_
	byte(0xE0): {
		Func:  (*Core).OPE0,
		Clock: 12,
		OP:    "LDH (a8),A",
	},
	byte(0xE1): {
		Func:  (*Core).OPE1,
		Clock: 12,
		OP:    "POP HL",
	},
	byte(0xE2): {
		Func:  (*Core).OPE2,
		Clock: 8,
		OP:    "LD (C),A",
	},
	byte(0xE5): {
		Func:  (*Core).OPE5,
		Clock: 16,
		OP:    "PUSH HL",
	},
	byte(0xE6): {
		Func:  (*Core).OPE6,
		Clock: 8,
		OP:    "AND d8",
	},
	byte(0xE7): {
		Func:  (*Core).OPE7,
		Clock: 16,
		OP:    "RST 20H",
	},
	byte(0xE8): {
		Func:  (*Core).OPE8,
		Clock: 16,
		OP:    "ADD SP,r8",
	},
	byte(0xE9): {
		Func:  (*Core).OPE9,
		Clock: 4,
		OP:    "JP (HL)",
	},
	byte(0xEA): {
		Func:  (*Core).OPEA,
		Clock: 16,
		OP:    "LD (a16),A",
	},
	byte(0xEE): {
		Func:  (*Core).OPEE,
		Clock: 8,
		OP:    "XOR d8",
	},
	byte(0xEF): {
		Func:  (*Core).OPEF,
		Clock: 16,
		OP:    "RST 28H",
	},
	//0xF_
	byte(0xF0): {
		Func:  (*Core).OPF0,
		Clock: 12,
		OP:    "LDH A,(a8)",
	},
	byte(0xF1): {
		Func:  (*Core).OPF1,
		Clock: 12,
		OP:    "POP AF",
	},
	byte(0xF2): {
		Func:  (*Core).OPF2,
		Clock: 8,
		OP:    "LD A,(C)",
	},
	byte(0xF3): {
		Func:  (*Core).OPF3,
		Clock: 4,
		OP:    "DI",
	},
	byte(0xF5): {
		Func:  (*Core).OPF5,
		Clock: 16,
		OP:    "PUSH AF",
	},
	byte(0xF6): {
		Func:  (*Core).OPF6,
		Clock: 8,
		OP:    "OR d8",
	},
	byte(0xF7): {
		Func:  (*Core).OPF7,
		Clock: 16,
		OP:    "RST 30H",
	},
	byte(0xF8): {
		Func:  (*Core).OPF8,
		Clock: 12,
		OP:    "LD HL,SP+r8",
	},
	byte(0xF9): {
		Func:  (*Core).OPF9,
		Clock: 8,
		OP:    "LD SP,HL",
	},
	byte(0xFA): {
		Func:  (*Core).OPFA,
		Clock: 16,
		OP:    "LD A,(a16)",
	},
	byte(0xFB): {
		Func:  (*Core).OPFB,
		Clock: 4,
		OP:    "EI",
	},
	byte(0xFE): {
		Func:  (*Core).OPFE,
		Clock: 8,
		OP:    "CP d8",
	},
	byte(0xFF): {
		Func:  (*Core).OPFF,
		Clock: 16,
		OP:    "RST 38H",
	},
}

type OPCodeUnit struct {
	Func  func(*Core) int
	Clock int
	OP    string
}

/*
	Reference: https://github.com/gabrielrcouto/php-terminal-gameboy-emulator/blob/master/src/Data.php
*/
var DAATable = []uint16{
	0x0080, 0x0100, 0x0200, 0x0300, 0x0400, 0x0500, 0x0600, 0x0700, 0x0800, 0x0900, 0x1000, 0x1100, 0x1200, 0x1300, 0x1400, 0x1500,
	0x1000, 0x1100, 0x1200, 0x1300, 0x1400, 0x1500, 0x1600, 0x1700, 0x1800, 0x1900, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500,
	0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, 0x2700, 0x2800, 0x2900, 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500,
	0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500, 0x3600, 0x3700, 0x3800, 0x3900, 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500,
	0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, 0x4600, 0x4700, 0x4800, 0x4900, 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500,
	0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, 0x5600, 0x5700, 0x5800, 0x5900, 0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500,
	0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500, 0x6600, 0x6700, 0x6800, 0x6900, 0x7000, 0x7100, 0x7200, 0x7300, 0x7400, 0x7500,
	0x7000, 0x7100, 0x7200, 0x7300, 0x7400, 0x7500, 0x7600, 0x7700, 0x7800, 0x7900, 0x8000, 0x8100, 0x8200, 0x8300, 0x8400, 0x8500,
	0x8000, 0x8100, 0x8200, 0x8300, 0x8400, 0x8500, 0x8600, 0x8700, 0x8800, 0x8900, 0x9000, 0x9100, 0x9200, 0x9300, 0x9400, 0x9500,
	0x9000, 0x9100, 0x9200, 0x9300, 0x9400, 0x9500, 0x9600, 0x9700, 0x9800, 0x9900, 0x0090, 0x0110, 0x0210, 0x0310, 0x0410, 0x0510,
	0x0090, 0x0110, 0x0210, 0x0310, 0x0410, 0x0510, 0x0610, 0x0710, 0x0810, 0x0910, 0x1010, 0x1110, 0x1210, 0x1310, 0x1410, 0x1510,
	0x1010, 0x1110, 0x1210, 0x1310, 0x1410, 0x1510, 0x1610, 0x1710, 0x1810, 0x1910, 0x2010, 0x2110, 0x2210, 0x2310, 0x2410, 0x2510,
	0x2010, 0x2110, 0x2210, 0x2310, 0x2410, 0x2510, 0x2610, 0x2710, 0x2810, 0x2910, 0x3010, 0x3110, 0x3210, 0x3310, 0x3410, 0x3510,
	0x3010, 0x3110, 0x3210, 0x3310, 0x3410, 0x3510, 0x3610, 0x3710, 0x3810, 0x3910, 0x4010, 0x4110, 0x4210, 0x4310, 0x4410, 0x4510,
	0x4010, 0x4110, 0x4210, 0x4310, 0x4410, 0x4510, 0x4610, 0x4710, 0x4810, 0x4910, 0x5010, 0x5110, 0x5210, 0x5310, 0x5410, 0x5510,
	0x5010, 0x5110, 0x5210, 0x5310, 0x5410, 0x5510, 0x5610, 0x5710, 0x5810, 0x5910, 0x6010, 0x6110, 0x6210, 0x6310, 0x6410, 0x6510,
	0x6010, 0x6110, 0x6210, 0x6310, 0x6410, 0x6510, 0x6610, 0x6710, 0x6810, 0x6910, 0x7010, 0x7110, 0x7210, 0x7310, 0x7410, 0x7510,
	0x7010, 0x7110, 0x7210, 0x7310, 0x7410, 0x7510, 0x7610, 0x7710, 0x7810, 0x7910, 0x8010, 0x8110, 0x8210, 0x8310, 0x8410, 0x8510,
	0x8010, 0x8110, 0x8210, 0x8310, 0x8410, 0x8510, 0x8610, 0x8710, 0x8810, 0x8910, 0x9010, 0x9110, 0x9210, 0x9310, 0x9410, 0x9510,
	0x9010, 0x9110, 0x9210, 0x9310, 0x9410, 0x9510, 0x9610, 0x9710, 0x9810, 0x9910, 0xA010, 0xA110, 0xA210, 0xA310, 0xA410, 0xA510,
	0xA010, 0xA110, 0xA210, 0xA310, 0xA410, 0xA510, 0xA610, 0xA710, 0xA810, 0xA910, 0xB010, 0xB110, 0xB210, 0xB310, 0xB410, 0xB510,
	0xB010, 0xB110, 0xB210, 0xB310, 0xB410, 0xB510, 0xB610, 0xB710, 0xB810, 0xB910, 0xC010, 0xC110, 0xC210, 0xC310, 0xC410, 0xC510,
	0xC010, 0xC110, 0xC210, 0xC310, 0xC410, 0xC510, 0xC610, 0xC710, 0xC810, 0xC910, 0xD010, 0xD110, 0xD210, 0xD310, 0xD410, 0xD510,
	0xD010, 0xD110, 0xD210, 0xD310, 0xD410, 0xD510, 0xD610, 0xD710, 0xD810, 0xD910, 0xE010, 0xE110, 0xE210, 0xE310, 0xE410, 0xE510,
	0xE010, 0xE110, 0xE210, 0xE310, 0xE410, 0xE510, 0xE610, 0xE710, 0xE810, 0xE910, 0xF010, 0xF110, 0xF210, 0xF310, 0xF410, 0xF510,
	0xF010, 0xF110, 0xF210, 0xF310, 0xF410, 0xF510, 0xF610, 0xF710, 0xF810, 0xF910, 0x0090, 0x0110, 0x0210, 0x0310, 0x0410, 0x0510,
	0x0090, 0x0110, 0x0210, 0x0310, 0x0410, 0x0510, 0x0610, 0x0710, 0x0810, 0x0910, 0x1010, 0x1110, 0x1210, 0x1310, 0x1410, 0x1510,
	0x1010, 0x1110, 0x1210, 0x1310, 0x1410, 0x1510, 0x1610, 0x1710, 0x1810, 0x1910, 0x2010, 0x2110, 0x2210, 0x2310, 0x2410, 0x2510,
	0x2010, 0x2110, 0x2210, 0x2310, 0x2410, 0x2510, 0x2610, 0x2710, 0x2810, 0x2910, 0x3010, 0x3110, 0x3210, 0x3310, 0x3410, 0x3510,
	0x3010, 0x3110, 0x3210, 0x3310, 0x3410, 0x3510, 0x3610, 0x3710, 0x3810, 0x3910, 0x4010, 0x4110, 0x4210, 0x4310, 0x4410, 0x4510,
	0x4010, 0x4110, 0x4210, 0x4310, 0x4410, 0x4510, 0x4610, 0x4710, 0x4810, 0x4910, 0x5010, 0x5110, 0x5210, 0x5310, 0x5410, 0x5510,
	0x5010, 0x5110, 0x5210, 0x5310, 0x5410, 0x5510, 0x5610, 0x5710, 0x5810, 0x5910, 0x6010, 0x6110, 0x6210, 0x6310, 0x6410, 0x6510,
	0x0600, 0x0700, 0x0800, 0x0900, 0x0A00, 0x0B00, 0x0C00, 0x0D00, 0x0E00, 0x0F00, 0x1000, 0x1100, 0x1200, 0x1300, 0x1400, 0x1500,
	0x1600, 0x1700, 0x1800, 0x1900, 0x1A00, 0x1B00, 0x1C00, 0x1D00, 0x1E00, 0x1F00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500,
	0x2600, 0x2700, 0x2800, 0x2900, 0x2A00, 0x2B00, 0x2C00, 0x2D00, 0x2E00, 0x2F00, 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500,
	0x3600, 0x3700, 0x3800, 0x3900, 0x3A00, 0x3B00, 0x3C00, 0x3D00, 0x3E00, 0x3F00, 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500,
	0x4600, 0x4700, 0x4800, 0x4900, 0x4A00, 0x4B00, 0x4C00, 0x4D00, 0x4E00, 0x4F00, 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500,
	0x5600, 0x5700, 0x5800, 0x5900, 0x5A00, 0x5B00, 0x5C00, 0x5D00, 0x5E00, 0x5F00, 0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500,
	0x6600, 0x6700, 0x6800, 0x6900, 0x6A00, 0x6B00, 0x6C00, 0x6D00, 0x6E00, 0x6F00, 0x7000, 0x7100, 0x7200, 0x7300, 0x7400, 0x7500,
	0x7600, 0x7700, 0x7800, 0x7900, 0x7A00, 0x7B00, 0x7C00, 0x7D00, 0x7E00, 0x7F00, 0x8000, 0x8100, 0x8200, 0x8300, 0x8400, 0x8500,
	0x8600, 0x8700, 0x8800, 0x8900, 0x8A00, 0x8B00, 0x8C00, 0x8D00, 0x8E00, 0x8F00, 0x9000, 0x9100, 0x9200, 0x9300, 0x9400, 0x9500,
	0x9600, 0x9700, 0x9800, 0x9900, 0x9A00, 0x9B00, 0x9C00, 0x9D00, 0x9E00, 0x9F00, 0x0090, 0x0110, 0x0210, 0x0310, 0x0410, 0x0510,
	0x0610, 0x0710, 0x0810, 0x0910, 0x0A10, 0x0B10, 0x0C10, 0x0D10, 0x0E10, 0x0F10, 0x1010, 0x1110, 0x1210, 0x1310, 0x1410, 0x1510,
	0x1610, 0x1710, 0x1810, 0x1910, 0x1A10, 0x1B10, 0x1C10, 0x1D10, 0x1E10, 0x1F10, 0x2010, 0x2110, 0x2210, 0x2310, 0x2410, 0x2510,
	0x2610, 0x2710, 0x2810, 0x2910, 0x2A10, 0x2B10, 0x2C10, 0x2D10, 0x2E10, 0x2F10, 0x3010, 0x3110, 0x3210, 0x3310, 0x3410, 0x3510,
	0x3610, 0x3710, 0x3810, 0x3910, 0x3A10, 0x3B10, 0x3C10, 0x3D10, 0x3E10, 0x3F10, 0x4010, 0x4110, 0x4210, 0x4310, 0x4410, 0x4510,
	0x4610, 0x4710, 0x4810, 0x4910, 0x4A10, 0x4B10, 0x4C10, 0x4D10, 0x4E10, 0x4F10, 0x5010, 0x5110, 0x5210, 0x5310, 0x5410, 0x5510,
	0x5610, 0x5710, 0x5810, 0x5910, 0x5A10, 0x5B10, 0x5C10, 0x5D10, 0x5E10, 0x5F10, 0x6010, 0x6110, 0x6210, 0x6310, 0x6410, 0x6510,
	0x6610, 0x6710, 0x6810, 0x6910, 0x6A10, 0x6B10, 0x6C10, 0x6D10, 0x6E10, 0x6F10, 0x7010, 0x7110, 0x7210, 0x7310, 0x7410, 0x7510,
	0x7610, 0x7710, 0x7810, 0x7910, 0x7A10, 0x7B10, 0x7C10, 0x7D10, 0x7E10, 0x7F10, 0x8010, 0x8110, 0x8210, 0x8310, 0x8410, 0x8510,
	0x8610, 0x8710, 0x8810, 0x8910, 0x8A10, 0x8B10, 0x8C10, 0x8D10, 0x8E10, 0x8F10, 0x9010, 0x9110, 0x9210, 0x9310, 0x9410, 0x9510,
	0x9610, 0x9710, 0x9810, 0x9910, 0x9A10, 0x9B10, 0x9C10, 0x9D10, 0x9E10, 0x9F10, 0xA010, 0xA110, 0xA210, 0xA310, 0xA410, 0xA510,
	0xA610, 0xA710, 0xA810, 0xA910, 0xAA10, 0xAB10, 0xAC10, 0xAD10, 0xAE10, 0xAF10, 0xB010, 0xB110, 0xB210, 0xB310, 0xB410, 0xB510,
	0xB610, 0xB710, 0xB810, 0xB910, 0xBA10, 0xBB10, 0xBC10, 0xBD10, 0xBE10, 0xBF10, 0xC010, 0xC110, 0xC210, 0xC310, 0xC410, 0xC510,
	0xC610, 0xC710, 0xC810, 0xC910, 0xCA10, 0xCB10, 0xCC10, 0xCD10, 0xCE10, 0xCF10, 0xD010, 0xD110, 0xD210, 0xD310, 0xD410, 0xD510,
	0xD610, 0xD710, 0xD810, 0xD910, 0xDA10, 0xDB10, 0xDC10, 0xDD10, 0xDE10, 0xDF10, 0xE010, 0xE110, 0xE210, 0xE310, 0xE410, 0xE510,
	0xE610, 0xE710, 0xE810, 0xE910, 0xEA10, 0xEB10, 0xEC10, 0xED10, 0xEE10, 0xEF10, 0xF010, 0xF110, 0xF210, 0xF310, 0xF410, 0xF510,
	0xF610, 0xF710, 0xF810, 0xF910, 0xFA10, 0xFB10, 0xFC10, 0xFD10, 0xFE10, 0xFF10, 0x0090, 0x0110, 0x0210, 0x0310, 0x0410, 0x0510,
	0x0610, 0x0710, 0x0810, 0x0910, 0x0A10, 0x0B10, 0x0C10, 0x0D10, 0x0E10, 0x0F10, 0x1010, 0x1110, 0x1210, 0x1310, 0x1410, 0x1510,
	0x1610, 0x1710, 0x1810, 0x1910, 0x1A10, 0x1B10, 0x1C10, 0x1D10, 0x1E10, 0x1F10, 0x2010, 0x2110, 0x2210, 0x2310, 0x2410, 0x2510,
	0x2610, 0x2710, 0x2810, 0x2910, 0x2A10, 0x2B10, 0x2C10, 0x2D10, 0x2E10, 0x2F10, 0x3010, 0x3110, 0x3210, 0x3310, 0x3410, 0x3510,
	0x3610, 0x3710, 0x3810, 0x3910, 0x3A10, 0x3B10, 0x3C10, 0x3D10, 0x3E10, 0x3F10, 0x4010, 0x4110, 0x4210, 0x4310, 0x4410, 0x4510,
	0x4610, 0x4710, 0x4810, 0x4910, 0x4A10, 0x4B10, 0x4C10, 0x4D10, 0x4E10, 0x4F10, 0x5010, 0x5110, 0x5210, 0x5310, 0x5410, 0x5510,
	0x5610, 0x5710, 0x5810, 0x5910, 0x5A10, 0x5B10, 0x5C10, 0x5D10, 0x5E10, 0x5F10, 0x6010, 0x6110, 0x6210, 0x6310, 0x6410, 0x6510,
	0x00C0, 0x0140, 0x0240, 0x0340, 0x0440, 0x0540, 0x0640, 0x0740, 0x0840, 0x0940, 0x0A40, 0x0B40, 0x0C40, 0x0D40, 0x0E40, 0x0F40,
	0x1040, 0x1140, 0x1240, 0x1340, 0x1440, 0x1540, 0x1640, 0x1740, 0x1840, 0x1940, 0x1A40, 0x1B40, 0x1C40, 0x1D40, 0x1E40, 0x1F40,
	0x2040, 0x2140, 0x2240, 0x2340, 0x2440, 0x2540, 0x2640, 0x2740, 0x2840, 0x2940, 0x2A40, 0x2B40, 0x2C40, 0x2D40, 0x2E40, 0x2F40,
	0x3040, 0x3140, 0x3240, 0x3340, 0x3440, 0x3540, 0x3640, 0x3740, 0x3840, 0x3940, 0x3A40, 0x3B40, 0x3C40, 0x3D40, 0x3E40, 0x3F40,
	0x4040, 0x4140, 0x4240, 0x4340, 0x4440, 0x4540, 0x4640, 0x4740, 0x4840, 0x4940, 0x4A40, 0x4B40, 0x4C40, 0x4D40, 0x4E40, 0x4F40,
	0x5040, 0x5140, 0x5240, 0x5340, 0x5440, 0x5540, 0x5640, 0x5740, 0x5840, 0x5940, 0x5A40, 0x5B40, 0x5C40, 0x5D40, 0x5E40, 0x5F40,
	0x6040, 0x6140, 0x6240, 0x6340, 0x6440, 0x6540, 0x6640, 0x6740, 0x6840, 0x6940, 0x6A40, 0x6B40, 0x6C40, 0x6D40, 0x6E40, 0x6F40,
	0x7040, 0x7140, 0x7240, 0x7340, 0x7440, 0x7540, 0x7640, 0x7740, 0x7840, 0x7940, 0x7A40, 0x7B40, 0x7C40, 0x7D40, 0x7E40, 0x7F40,
	0x8040, 0x8140, 0x8240, 0x8340, 0x8440, 0x8540, 0x8640, 0x8740, 0x8840, 0x8940, 0x8A40, 0x8B40, 0x8C40, 0x8D40, 0x8E40, 0x8F40,
	0x9040, 0x9140, 0x9240, 0x9340, 0x9440, 0x9540, 0x9640, 0x9740, 0x9840, 0x9940, 0x9A40, 0x9B40, 0x9C40, 0x9D40, 0x9E40, 0x9F40,
	0xA040, 0xA140, 0xA240, 0xA340, 0xA440, 0xA540, 0xA640, 0xA740, 0xA840, 0xA940, 0xAA40, 0xAB40, 0xAC40, 0xAD40, 0xAE40, 0xAF40,
	0xB040, 0xB140, 0xB240, 0xB340, 0xB440, 0xB540, 0xB640, 0xB740, 0xB840, 0xB940, 0xBA40, 0xBB40, 0xBC40, 0xBD40, 0xBE40, 0xBF40,
	0xC040, 0xC140, 0xC240, 0xC340, 0xC440, 0xC540, 0xC640, 0xC740, 0xC840, 0xC940, 0xCA40, 0xCB40, 0xCC40, 0xCD40, 0xCE40, 0xCF40,
	0xD040, 0xD140, 0xD240, 0xD340, 0xD440, 0xD540, 0xD640, 0xD740, 0xD840, 0xD940, 0xDA40, 0xDB40, 0xDC40, 0xDD40, 0xDE40, 0xDF40,
	0xE040, 0xE140, 0xE240, 0xE340, 0xE440, 0xE540, 0xE640, 0xE740, 0xE840, 0xE940, 0xEA40, 0xEB40, 0xEC40, 0xED40, 0xEE40, 0xEF40,
	0xF040, 0xF140, 0xF240, 0xF340, 0xF440, 0xF540, 0xF640, 0xF740, 0xF840, 0xF940, 0xFA40, 0xFB40, 0xFC40, 0xFD40, 0xFE40, 0xFF40,
	0xA050, 0xA150, 0xA250, 0xA350, 0xA450, 0xA550, 0xA650, 0xA750, 0xA850, 0xA950, 0xAA50, 0xAB50, 0xAC50, 0xAD50, 0xAE50, 0xAF50,
	0xB050, 0xB150, 0xB250, 0xB350, 0xB450, 0xB550, 0xB650, 0xB750, 0xB850, 0xB950, 0xBA50, 0xBB50, 0xBC50, 0xBD50, 0xBE50, 0xBF50,
	0xC050, 0xC150, 0xC250, 0xC350, 0xC450, 0xC550, 0xC650, 0xC750, 0xC850, 0xC950, 0xCA50, 0xCB50, 0xCC50, 0xCD50, 0xCE50, 0xCF50,
	0xD050, 0xD150, 0xD250, 0xD350, 0xD450, 0xD550, 0xD650, 0xD750, 0xD850, 0xD950, 0xDA50, 0xDB50, 0xDC50, 0xDD50, 0xDE50, 0xDF50,
	0xE050, 0xE150, 0xE250, 0xE350, 0xE450, 0xE550, 0xE650, 0xE750, 0xE850, 0xE950, 0xEA50, 0xEB50, 0xEC50, 0xED50, 0xEE50, 0xEF50,
	0xF050, 0xF150, 0xF250, 0xF350, 0xF450, 0xF550, 0xF650, 0xF750, 0xF850, 0xF950, 0xFA50, 0xFB50, 0xFC50, 0xFD50, 0xFE50, 0xFF50,
	0x00D0, 0x0150, 0x0250, 0x0350, 0x0450, 0x0550, 0x0650, 0x0750, 0x0850, 0x0950, 0x0A50, 0x0B50, 0x0C50, 0x0D50, 0x0E50, 0x0F50,
	0x1050, 0x1150, 0x1250, 0x1350, 0x1450, 0x1550, 0x1650, 0x1750, 0x1850, 0x1950, 0x1A50, 0x1B50, 0x1C50, 0x1D50, 0x1E50, 0x1F50,
	0x2050, 0x2150, 0x2250, 0x2350, 0x2450, 0x2550, 0x2650, 0x2750, 0x2850, 0x2950, 0x2A50, 0x2B50, 0x2C50, 0x2D50, 0x2E50, 0x2F50,
	0x3050, 0x3150, 0x3250, 0x3350, 0x3450, 0x3550, 0x3650, 0x3750, 0x3850, 0x3950, 0x3A50, 0x3B50, 0x3C50, 0x3D50, 0x3E50, 0x3F50,
	0x4050, 0x4150, 0x4250, 0x4350, 0x4450, 0x4550, 0x4650, 0x4750, 0x4850, 0x4950, 0x4A50, 0x4B50, 0x4C50, 0x4D50, 0x4E50, 0x4F50,
	0x5050, 0x5150, 0x5250, 0x5350, 0x5450, 0x5550, 0x5650, 0x5750, 0x5850, 0x5950, 0x5A50, 0x5B50, 0x5C50, 0x5D50, 0x5E50, 0x5F50,
	0x6050, 0x6150, 0x6250, 0x6350, 0x6450, 0x6550, 0x6650, 0x6750, 0x6850, 0x6950, 0x6A50, 0x6B50, 0x6C50, 0x6D50, 0x6E50, 0x6F50,
	0x7050, 0x7150, 0x7250, 0x7350, 0x7450, 0x7550, 0x7650, 0x7750, 0x7850, 0x7950, 0x7A50, 0x7B50, 0x7C50, 0x7D50, 0x7E50, 0x7F50,
	0x8050, 0x8150, 0x8250, 0x8350, 0x8450, 0x8550, 0x8650, 0x8750, 0x8850, 0x8950, 0x8A50, 0x8B50, 0x8C50, 0x8D50, 0x8E50, 0x8F50,
	0x9050, 0x9150, 0x9250, 0x9350, 0x9450, 0x9550, 0x9650, 0x9750, 0x9850, 0x9950, 0x9A50, 0x9B50, 0x9C50, 0x9D50, 0x9E50, 0x9F50,
	0xFA40, 0xFB40, 0xFC40, 0xFD40, 0xFE40, 0xFF40, 0x00C0, 0x0140, 0x0240, 0x0340, 0x0440, 0x0540, 0x0640, 0x0740, 0x0840, 0x0940,
	0x0A40, 0x0B40, 0x0C40, 0x0D40, 0x0E40, 0x0F40, 0x1040, 0x1140, 0x1240, 0x1340, 0x1440, 0x1540, 0x1640, 0x1740, 0x1840, 0x1940,
	0x1A40, 0x1B40, 0x1C40, 0x1D40, 0x1E40, 0x1F40, 0x2040, 0x2140, 0x2240, 0x2340, 0x2440, 0x2540, 0x2640, 0x2740, 0x2840, 0x2940,
	0x2A40, 0x2B40, 0x2C40, 0x2D40, 0x2E40, 0x2F40, 0x3040, 0x3140, 0x3240, 0x3340, 0x3440, 0x3540, 0x3640, 0x3740, 0x3840, 0x3940,
	0x3A40, 0x3B40, 0x3C40, 0x3D40, 0x3E40, 0x3F40, 0x4040, 0x4140, 0x4240, 0x4340, 0x4440, 0x4540, 0x4640, 0x4740, 0x4840, 0x4940,
	0x4A40, 0x4B40, 0x4C40, 0x4D40, 0x4E40, 0x4F40, 0x5040, 0x5140, 0x5240, 0x5340, 0x5440, 0x5540, 0x5640, 0x5740, 0x5840, 0x5940,
	0x5A40, 0x5B40, 0x5C40, 0x5D40, 0x5E40, 0x5F40, 0x6040, 0x6140, 0x6240, 0x6340, 0x6440, 0x6540, 0x6640, 0x6740, 0x6840, 0x6940,
	0x6A40, 0x6B40, 0x6C40, 0x6D40, 0x6E40, 0x6F40, 0x7040, 0x7140, 0x7240, 0x7340, 0x7440, 0x7540, 0x7640, 0x7740, 0x7840, 0x7940,
	0x7A40, 0x7B40, 0x7C40, 0x7D40, 0x7E40, 0x7F40, 0x8040, 0x8140, 0x8240, 0x8340, 0x8440, 0x8540, 0x8640, 0x8740, 0x8840, 0x8940,
	0x8A40, 0x8B40, 0x8C40, 0x8D40, 0x8E40, 0x8F40, 0x9040, 0x9140, 0x9240, 0x9340, 0x9440, 0x9540, 0x9640, 0x9740, 0x9840, 0x9940,
	0x9A40, 0x9B40, 0x9C40, 0x9D40, 0x9E40, 0x9F40, 0xA040, 0xA140, 0xA240, 0xA340, 0xA440, 0xA540, 0xA640, 0xA740, 0xA840, 0xA940,
	0xAA40, 0xAB40, 0xAC40, 0xAD40, 0xAE40, 0xAF40, 0xB040, 0xB140, 0xB240, 0xB340, 0xB440, 0xB540, 0xB640, 0xB740, 0xB840, 0xB940,
	0xBA40, 0xBB40, 0xBC40, 0xBD40, 0xBE40, 0xBF40, 0xC040, 0xC140, 0xC240, 0xC340, 0xC440, 0xC540, 0xC640, 0xC740, 0xC840, 0xC940,
	0xCA40, 0xCB40, 0xCC40, 0xCD40, 0xCE40, 0xCF40, 0xD040, 0xD140, 0xD240, 0xD340, 0xD440, 0xD540, 0xD640, 0xD740, 0xD840, 0xD940,
	0xDA40, 0xDB40, 0xDC40, 0xDD40, 0xDE40, 0xDF40, 0xE040, 0xE140, 0xE240, 0xE340, 0xE440, 0xE540, 0xE640, 0xE740, 0xE840, 0xE940,
	0xEA40, 0xEB40, 0xEC40, 0xED40, 0xEE40, 0xEF40, 0xF040, 0xF140, 0xF240, 0xF340, 0xF440, 0xF540, 0xF640, 0xF740, 0xF840, 0xF940,
	0x9A50, 0x9B50, 0x9C50, 0x9D50, 0x9E50, 0x9F50, 0xA050, 0xA150, 0xA250, 0xA350, 0xA450, 0xA550, 0xA650, 0xA750, 0xA850, 0xA950,
	0xAA50, 0xAB50, 0xAC50, 0xAD50, 0xAE50, 0xAF50, 0xB050, 0xB150, 0xB250, 0xB350, 0xB450, 0xB550, 0xB650, 0xB750, 0xB850, 0xB950,
	0xBA50, 0xBB50, 0xBC50, 0xBD50, 0xBE50, 0xBF50, 0xC050, 0xC150, 0xC250, 0xC350, 0xC450, 0xC550, 0xC650, 0xC750, 0xC850, 0xC950,
	0xCA50, 0xCB50, 0xCC50, 0xCD50, 0xCE50, 0xCF50, 0xD050, 0xD150, 0xD250, 0xD350, 0xD450, 0xD550, 0xD650, 0xD750, 0xD850, 0xD950,
	0xDA50, 0xDB50, 0xDC50, 0xDD50, 0xDE50, 0xDF50, 0xE050, 0xE150, 0xE250, 0xE350, 0xE450, 0xE550, 0xE650, 0xE750, 0xE850, 0xE950,
	0xEA50, 0xEB50, 0xEC50, 0xED50, 0xEE50, 0xEF50, 0xF050, 0xF150, 0xF250, 0xF350, 0xF450, 0xF550, 0xF650, 0xF750, 0xF850, 0xF950,
	0xFA50, 0xFB50, 0xFC50, 0xFD50, 0xFE50, 0xFF50, 0x00D0, 0x0150, 0x0250, 0x0350, 0x0450, 0x0550, 0x0650, 0x0750, 0x0850, 0x0950,
	0x0A50, 0x0B50, 0x0C50, 0x0D50, 0x0E50, 0x0F50, 0x1050, 0x1150, 0x1250, 0x1350, 0x1450, 0x1550, 0x1650, 0x1750, 0x1850, 0x1950,
	0x1A50, 0x1B50, 0x1C50, 0x1D50, 0x1E50, 0x1F50, 0x2050, 0x2150, 0x2250, 0x2350, 0x2450, 0x2550, 0x2650, 0x2750, 0x2850, 0x2950,
	0x2A50, 0x2B50, 0x2C50, 0x2D50, 0x2E50, 0x2F50, 0x3050, 0x3150, 0x3250, 0x3350, 0x3450, 0x3550, 0x3650, 0x3750, 0x3850, 0x3950,
	0x3A50, 0x3B50, 0x3C50, 0x3D50, 0x3E50, 0x3F50, 0x4050, 0x4150, 0x4250, 0x4350, 0x4450, 0x4550, 0x4650, 0x4750, 0x4850, 0x4950,
	0x4A50, 0x4B50, 0x4C50, 0x4D50, 0x4E50, 0x4F50, 0x5050, 0x5150, 0x5250, 0x5350, 0x5450, 0x5550, 0x5650, 0x5750, 0x5850, 0x5950,
	0x5A50, 0x5B50, 0x5C50, 0x5D50, 0x5E50, 0x5F50, 0x6050, 0x6150, 0x6250, 0x6350, 0x6450, 0x6550, 0x6650, 0x6750, 0x6850, 0x6950,
	0x6A50, 0x6B50, 0x6C50, 0x6D50, 0x6E50, 0x6F50, 0x7050, 0x7150, 0x7250, 0x7350, 0x7450, 0x7550, 0x7650, 0x7750, 0x7850, 0x7950,
	0x7A50, 0x7B50, 0x7C50, 0x7D50, 0x7E50, 0x7F50, 0x8050, 0x8150, 0x8250, 0x8350, 0x8450, 0x8550, 0x8650, 0x8750, 0x8850, 0x8950,
	0x8A50, 0x8B50, 0x8C50, 0x8D50, 0x8E50, 0x8F50, 0x9050, 0x9150, 0x9250, 0x9350, 0x9450, 0x9550, 0x9650, 0x9750, 0x9850, 0x9950,
}
